﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

/// <summary>
/// Descrizione di riepilogo per Security
/// </summary>
public class Security
{
    static object staOb = new object();

    public static readonly string CaratNonAmmessi = "<>;&#=-/";
    public static readonly string CaratAssolutVietati = "&#=-/";


    /// <summary>
    /// Regular expression to validate e-mail addresses
    /// </summary>
    public static string reEmailRegex = @"^(\w[-._\w]*@\w[-._\w]*\w\.\w{2,6})$";
    public string EmailRegex { get { return reEmailRegex; } }

    /// <summary>
    /// Regular expression to validate urls
    /// </summary>
    public static string reUrlRegex = @"^((((http|https):\/\/)|^)[\w-_]+(\.[\w-_]+)+([\w\-\.,@?^=%&amp;:/~\+]*[\w\-\@?^=%&amp;/~\+])?)$";
    public string UrlRegex { get { return reUrlRegex; } }

    public Security()
    {
    }

    public static string getPrimaryDomainUrl()
    {
        lock (staOb)
        {
            string[] sp = System.Web.HttpContext.Current.Request.Url.AbsoluteUri.Split('/');
            return (sp[0] + "//" + sp[2]);
        }
    }//fm


    /// <summary>
    /// controlla che non ci siano caratteri strani <>';&#=-/ 
    /// </summary>
    /// <param name="pTxt"></param>
    /// <param name="pCarattere"></param>
    /// <returns>false se non ci sono car non ammessi e l'errore del carattere non ammesso</returns>		
    public bool CiSonoCarNonAmmessi(string pTxt, out string pCarattere)
    {
        string car;
        pCarattere = string.Empty;
        for (int i = 0; i < pTxt.Length; i++)
        {
            if (CaratNonAmmessi.IndexOf(pTxt[i].ToString(), StringComparison.CurrentCultureIgnoreCase) > 0)
            { pCarattere = pTxt[i].ToString(); return true; };
        }
        return false;
    }//fM 

    public bool CiSonoCarNonAmmessi(string pTxt, string pNomeCampo, ref Literal pLiteral)
    {
        string carattere = string.Empty;
        if (CiSonoCarNonAmmessi(pTxt, out carattere))
        { pLiteral.Text = "Errore in " + pNomeCampo + " : carattere non ammesso " + carattere; return true; }

        return false;
    }//fM

    public bool CiSonoCarNonAmmessiOVuoto(string pTxt, string pNomeCampo, ref Literal pLiteral)
    {
        if (string.IsNullOrEmpty(pTxt))
        { pLiteral.Text = "Errore in " + pNomeCampo + " : dati obbigatori "; return true; }
        string carattere = string.Empty;
        if (CiSonoCarNonAmmessi(pTxt, out carattere))
        { pLiteral.Text = "Errore in " + pNomeCampo + " : carattere non ammesso " + carattere; return true; }

        return false;
    }//fM


    public bool CiSonoCarAssolutVietati(string pTxt, out string pCarattere)
    {
        string car;
        pCarattere = string.Empty;
        for (int i = 0; i < pTxt.Length; i++)
        {
            if (CaratAssolutVietati.IndexOf(pTxt[i].ToString(), StringComparison.CurrentCultureIgnoreCase) > 0)
            { pCarattere = pTxt[i].ToString(); return true; };
        }
        return false;

    }//fM 


    /// <summary>
    /// controlla correttezza email
    /// </summary>
    /// <param name="pEmail"></param>
    /// <returns>true se corretta e il messaggio di errore</returns>
    public bool EmailIsCorrect(string pEmail, out string pErrorMsg)
    {
        pErrorMsg = string.Empty;
        string car = string.Empty;

        if (string.IsNullOrEmpty(pEmail)) { pErrorMsg = "Email non presente"; return false; }
        if (CiSonoCarNonAmmessi(pEmail, out car))
        { pErrorMsg = "Ci sono dei caratteri non ammessi : " + car; return false; }

        if (pEmail.IndexOf("@") < 1) { pErrorMsg = "Email non valida manca il carattere @"; return false; }
        if (pEmail.IndexOf(".") < 1) { pErrorMsg = "Email non valida manca il carattere ."; return false; }

        if (pEmail.Length < 6) { pErrorMsg = "Email non valida (lunghezza)"; return false; }

        return true;

    }//fM

    public bool checkIsNumericString(string pTxt)
    {
        double num = 0.0;
        return double.TryParse(pTxt, out num);
    }//fM

    public bool stringIsNullOrEmpty(string pTxt)
    {
        if (string.IsNullOrEmpty(pTxt)) return true;
        return false;

    }//fM


    public bool checkInput(string pTxt)
    {

        return true;

    }//fM


}
